package com.sheng.project.study.spring.demo03.test3;

import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.config.Scope;
import org.springframework.lang.Nullable;

/**
 * @author liusheng
 * @date 2023/07/10
 */
public class BeanMyScope implements Scope {

    // 定义了一个常量，作为作用域的值
    public static final String SCOPE_MY = "my";

    // 这个 get 方法是关键，自定义作用域会自动调用这个 get 方法来创建 bean 对象，这个地方输出了一行日志，为了一会方便看效果
    @Override
    public Object get(String name, ObjectFactory<?> objectFactory) {
        // 通过 objectFactory.getObject() 获取 bean 实例返回。
        System.out.println("BeanMyScope >>>>>>>>> get:" + name);
        return objectFactory.getObject();
    }

    @Nullable
    @Override
    public Object remove(String name) {
        return null;
    }

    @Override
    public void registerDestructionCallback(String name, Runnable callback) {
    }

    @Nullable
    @Override
    public Object resolveContextualObject(String key) {
        return null;
    }

    @Nullable
    @Override
    public String getConversationId() {
        return null;
    }
}
